package com.shujia.mr.count;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;


/**
 * 学生总分统计逻辑：
 *   map端：
 *      1.读取每一行数据 1500100001,1000001,98
 *      2.跟据，切分数据
 *      3.取其中的学生编号及学生总分
 *      4.将学生编号及学生总分写出至Reduce端，并且将学生编号作为Key 学生各科分数作为 Value
 *   reduce端：
 *      1.由于reduce端会将相同Key的Value拉取到同一个Reduce函数中处理
 *          所以reduce端接收到的数据为 Key:学生编号  Value：各科学生的成绩
 *      2.循环遍历迭代器中的Values,做分数的累加，即可求出每个学生的总分
 */
public class MyCountMapper extends Mapper<LongWritable, Text,Text, IntWritable> {
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
        // 获取每一列的数据
        String[] columns = value.toString().split(",");
        // 获取学生ID和成绩并做数据转换
        String studentID = columns[0];
        int score = Integer.parseInt(columns[2]);
        // 写出数据
        context.write(new Text(studentID),new IntWritable(score));

    }
}
